home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Point;
- import java.awt.Polygon;
- import java.awt.Rectangle;
- import java.awt.image.ColorModel;
- import java.awt.image.ImageObserver;
- import java.awt.image.MemoryImageSource;
- import java.io.DataInputStream;
-
- public class CShapeAction extends CDisplayAction {
- final int NO_FILL = 2;
- final int PATTERN_FILL = 4;
- final int GRADIENT_FILL = 8;
- protected short m_byType;
- protected int m_nPenStyle;
- protected int m_nFlags;
- protected Point m_Roundness = new Point(0, 0);
- protected CPolyline m_Polyline = new CPolyline();
- protected Color m_PenColor = new Color(0, 0, 0);
- protected Color m_BrushColor = new Color(0, 0, 0);
- protected Color m_rgbToColour = new Color(0, 0, 0);
- protected short m_byArrowHeadStyle;
- private Image m_imgGradient;
-
- void DrawObject(Graphics var1, int var2, CPolyline var3) {
- switch (this.m_byType) {
- case 0:
- if (var3.npoints != 2) {
- System.out.println("Wrong number of points specified for line: " + var3.npoints);
- return;
- }
-
- if (this.m_nPenStyle != 5) {
- var1.setColor(this.m_PenColor);
- var1.drawLine(var3.xpoints[0], var3.ypoints[0], var3.xpoints[1], var3.ypoints[1]);
- }
-
- if (this.m_byArrowHeadStyle != 0) {
- Point var7 = new Point(var3.xpoints[0], var3.ypoints[0]);
- Point var5 = new Point(var3.xpoints[1], var3.ypoints[1]);
- switch (this.m_byArrowHeadStyle) {
- case 1:
- Utils.DrawArrowHead(var1, var7, var5, 1, 1);
- return;
- case 2:
- Utils.DrawArrowHead(var1, var7, var5, 1, 0);
- return;
- case 3:
- Utils.DrawArrowHead(var1, var5, var7, 1, 1);
- return;
- case 4:
- Utils.DrawArrowHead(var1, var5, var7, 1, 0);
- return;
- case 5:
- Utils.DrawArrowHead(var1, var7, var5, 1, 1);
- Utils.DrawArrowHead(var1, var5, var7, 1, 1);
- return;
- case 6:
- Utils.DrawArrowHead(var1, var5, var7, 1, 0);
- Utils.DrawArrowHead(var1, var7, var5, 1, 0);
- return;
- }
- }
- break;
- case 1:
- case 2:
- case 3:
- default:
- System.out.println("Invalid shape type requested: " + this.m_byType);
- break;
- case 4:
- if (var3.npoints <= 2) {
- System.out.println("Too few points defined for polygon: " + var3.npoints);
- return;
- }
-
- if ((this.m_nFlags & 8) != 0) {
- CRect var4 = new CRect(var3.GetBoundingRect());
- var1.drawImage(this.m_imgGradient, var4.x, var4.y, (ImageObserver)null);
- } else if ((this.m_nFlags & 2) == 0) {
- var1.setColor(this.m_BrushColor);
- var1.fillPolygon(var3);
- }
-
- if (this.m_nPenStyle != 5) {
- var1.setColor(this.m_PenColor);
- if ((this.m_nFlags & 2) == 0) {
- var1.drawPolygon(var3);
- return;
- }
-
- for(int var6 = 0; var6 < var3.npoints - 1; ++var6) {
- var1.drawLine(var3.xpoints[var6], var3.ypoints[var6], var3.xpoints[var6 + 1], var3.ypoints[var6 + 1]);
- }
-
- return;
- }
- }
-
- }
-
- void DrawObject(Graphics var1, int var2, CRect var3) {
- switch (this.m_byType) {
- case 1:
- if ((this.m_nFlags & 8) != 0) {
- var1.drawImage(this.m_imgGradient, var3.x, var3.y, (ImageObserver)null);
- } else if ((this.m_nFlags & 2) == 0) {
- var1.setColor(this.m_BrushColor);
- var1.fillRect(var3.x, var3.y, var3.width - 1, var3.height - 1);
- }
-
- if (this.m_nPenStyle != 5) {
- var1.setColor(this.m_PenColor);
- var1.drawRect(var3.x, var3.y, var3.width - 1, var3.height - 1);
- return;
- }
- break;
- case 2:
- if ((this.m_nFlags & 8) != 0) {
- var1.drawImage(this.m_imgGradient, var3.x, var3.y, (ImageObserver)null);
- } else if ((this.m_nFlags & 2) == 0) {
- var1.setColor(this.m_BrushColor);
- var1.fillRoundRect(var3.x, var3.y, var3.width - 1, var3.height - 1, this.m_Roundness.x, this.m_Roundness.y);
- }
-
- if (this.m_nPenStyle != 5) {
- var1.setColor(this.m_PenColor);
- var1.drawRoundRect(var3.x, var3.y, var3.width - 1, var3.height - 1, this.m_Roundness.x, this.m_Roundness.y);
- return;
- }
- break;
- case 3:
- if ((this.m_nFlags & 8) != 0) {
- var1.drawImage(this.m_imgGradient, var3.x, var3.y, (ImageObserver)null);
- } else if ((this.m_nFlags & 2) == 0) {
- var1.setColor(this.m_BrushColor);
- var1.fillOval(var3.x, var3.y, var3.width - 1, var3.height - 1);
- }
-
- if (this.m_nPenStyle != 5) {
- var1.setColor(this.m_PenColor);
- var1.drawOval(var3.x, var3.y, var3.width - 1, var3.height - 1);
- return;
- }
- }
-
- }
-
- boolean LoadFromFile(DataInputStream var1) {
- this.m_byType = FileLoad.ReadCPlusByte(var1);
- this.m_nFlags = FileLoad.ReadCPlusInt(var1);
- this.m_nPenStyle = FileLoad.ReadCPlusInt(var1);
- FileLoad.ReadCPlusPoint(var1);
- this.m_PenColor = FileLoad.ReadColor(var1);
- this.m_Roundness = FileLoad.ReadCPlusPoint(var1);
- FileLoad.ReadCPlusInt(var1);
- this.m_BrushColor = FileLoad.ReadColor(var1);
- FileLoad.ReadCPlusInt(var1);
- this.m_rgbToColour = FileLoad.ReadColor(var1);
- this.m_byArrowHeadStyle = FileLoad.ReadCPlusByte(var1);
- this.m_Polyline.LoadFromFile(var1);
- super.LoadFromFile(var1);
- return true;
- }
-
- public void ProduceGradientImage(CRect var1) {
- this.m_imgGradient = Utils.DrawGradientFill(var1, this.m_BrushColor, this.m_rgbToColour, this.m_nFlags);
- if (this.m_byType != 1) {
- int[] var2 = Utils.GrabPixels(this.m_imgGradient, 0, 0, var1.width, var1.height);
- Image var3 = Globals.thePresView.createImage(var1.width, var1.height);
- Graphics var4 = var3.getGraphics();
- var4.setColor(Color.black);
- var4.fillRect(0, 0, var1.width, var1.height);
- var4.setColor(Color.white);
- switch (this.m_byType) {
- case 2:
- var4.fillRoundRect(0, 0, var1.width - 1, var1.height - 1, this.m_Roundness.x, this.m_Roundness.y);
- break;
- case 3:
- var4.fillOval(0, 0, var1.width - 1, var1.height - 1);
- break;
- case 4:
- CPolyline var5 = new CPolyline(this.m_Polyline.xpoints, this.m_Polyline.ypoints, this.m_Polyline.npoints);
- CPolyline var6 = new CPolyline();
- var6.npoints = var5.npoints;
- var6.xpoints = var5.xpoints;
- var6.ypoints = var5.ypoints;
-
- for(int var7 = 0; var7 < var6.npoints; ++var7) {
- int[] var10000 = var6.xpoints;
- var10000[var7] -= var1.x;
- var10000 = var6.ypoints;
- var10000[var7] -= var1.y;
- }
-
- var4.fillPolygon(var6);
- break;
- default:
- System.out.println("Gradient mask requested for illegal shape: " + this.m_byType);
- }
-
- int[] var8 = Utils.GrabPixels(var3, 0, 0, var1.width, var1.height);
- int var9 = Color.black.getRGB();
-
- for(int var10 = 0; var10 < var1.width * var1.height; ++var10) {
- if (var8[var10] == var9) {
- var2[var10] = 0;
- }
- }
-
- ColorModel var11 = ColorModel.getRGBdefault();
- this.m_imgGradient = Globals.thePresView.createImage(new MemoryImageSource(var1.width, var1.height, var11, var2, 0, var1.width));
- }
-
- }
-
- public CShapeAction() {
- super(31);
- ((CDisplayAction)this).SetZOrder((short)6);
- }
-
- boolean HitTestCheck(Point var1, CRect var2) {
- return ((Rectangle)var2).inside(var1.x, var1.y);
- }
-
- boolean HitTestCheck(Point var1, CPolyline var2) {
- if (var2.npoints == 2) {
- int[] var3 = new int[4];
- int[] var4 = new int[4];
- int var5 = 0;
-
- do {
- var3[var5] = var2.xpoints[var5 / 2];
- var4[var5] = var2.ypoints[var5 / 2];
- ++var5;
- } while(var5 < 4);
-
- if (var2.xpoints[0] < var2.xpoints[1]) {
- var3[0] -= 6;
- var3[1] += 6;
- var3[2] += 6;
- var3[3] -= 6;
- } else {
- var3[0] += 6;
- var3[1] -= 6;
- var3[2] -= 6;
- var3[3] += 6;
- }
-
- if (var2.ypoints[0] < var2.ypoints[1]) {
- var4[0] -= 6;
- var4[1] += 6;
- var4[2] += 6;
- var4[3] -= 6;
- } else {
- var4[0] += 6;
- var4[1] -= 6;
- var4[2] -= 6;
- var4[3] += 6;
- }
-
- var2 = new CPolyline(var3, var4, 4);
- }
-
- System.out.println("HitTestCheck returning " + ((Polygon)var2).inside(var1.x, var1.y));
- return ((Polygon)var2).inside(var1.x, var1.y);
- }
-
- CPolyline GetActualPolyline() {
- return this.m_Polyline;
- }
-
- boolean DoAction() {
- boolean var1 = false;
- CRect var2 = new CRect();
- if (this.m_byType != 0 && this.m_byType != 4) {
- if (this.m_byType == 1 || this.m_byType == 2 || this.m_byType == 3) {
- var2.reshape(((CDisplayAction)this).GetActualRect());
- }
- } else {
- var2.reshape(this.m_Polyline.GetBoundingRect());
- ++var2.width;
- ++var2.height;
- if (this.m_byArrowHeadStyle > 0) {
- ((Rectangle)var2).grow(3, 3);
- }
- }
-
- if (!((Rectangle)var2).equals(((CDisplayAction)this).GetDrawRect())) {
- if (!((CDisplayAction)this).GetDrawRect().isEmpty()) {
- Globals.thePresView.InvalidateOffScreenRect(((CDisplayAction)this).GetDrawRect());
- }
-
- ((CDisplayAction)this).SetDrawRect(var2);
- var1 = true;
- }
-
- if ((this.m_nFlags & 8) != 0 && this.m_byType != 0) {
- this.ProduceGradientImage(var2);
- }
-
- int var3 = 0;
- switch (this.m_byType) {
- case 0:
- var3 = 4;
- break;
- case 1:
- var3 = 16;
- break;
- case 2:
- var3 = 8;
- break;
- case 3:
- var3 = 32;
- break;
- case 4:
- var3 = 2;
- break;
- default:
- System.out.println("ERROR: Illegal shape type requested: " + this.m_byType);
- }
-
- if (super.m_Effect.HasValidEffect()) {
- var3 |= 2048;
- Globals.thePresView.RenderAndDrawDirtyList();
- }
-
- Globals.thePresView.AddDrawObject((CIconObject)this, var3, var1);
- return true;
- }
- }
-